Load Packages
library(arrow)
library(tidyverse)
library(ggplot2)
library(ggbeeswarm)
library(dplyr)
Upload Parquet File:
d1 = read_parquet("C:/Users/asare/Downloads/prevalence_by_geography_and_year_and_source (2).parquet")
head(d1)
Add Regions Column:
d1 = d1 %>%
mutate(region = case_when(
geography %in% c("Illinois", "Indiana", "Iowa", "Kansas", "Michigan", "Minnesota",
"Missouri", "Nebraska", "North Dakota", "Ohio", "South Dakota", "Wisconsin") ~ "Midwest",
geography %in% c("Connecticut", "Maine", "Massachusetts", "New Hampshire", "New Jersey",
"New York", "Pennsylvania", "Rhode Island", "Vermont") ~ "Northeast",
geography %in% c("Alaska", "Arizona", "California", "Colorado", "Hawaii", "Idaho",
"Montana", "Nevada", "New Mexico", "Oregon", "Utah", "Washington", "Wyoming") ~ "West",
geography %in% c("Alabama", "Arkansas", "Delaware", "District of Columbia", "Florida", "Georgia",
"Kentucky", "Louisiana", "Maryland", "Mississippi", "North Carolina", "Oklahoma",
"South Carolina", "Tennessee", "Texas", "Virginia", "West Virginia") ~ "South",
TRUE ~ "Other"
))
#Separate Datasets by United States only and States Only
state = d1 %>% filter(! region %in% c("Other"))
us = d1 %>% filter(region == "Other")
Create Separate Region Only Dataset
Midwest = c("Illinois", "Indiana", "Iowa", "Kansas", "Michigan", "Minnesota",
"Missouri", "Nebraska", "North Dakota", "Ohio", "South Dakota", "Wisconsin")
Northeast = c("Connecticut", "Maine", "Massachusetts", "New Hampshire", "New Jersey",
"New York", "Pennsylvania", "Rhode Island", "Vermont")
West = c("Alaska", "Arizona", "California", "Colorado", "Hawaii", "Idaho",
"Montana", "Nevada", "New Mexico", "Oregon", "Utah", "Washington", "Wyoming")
South = c("Alabama", "Arkansas", "Delaware", "District of Columbia", "Florida", "Georgia",
"Kentucky", "Louisiana", "Maryland", "Mississippi", "North Carolina", "Oklahoma",
"South Carolina", "Tennessee", "Texas", "Virginia", "West Virginia")
Midwest <- c("Illinois", "Indiana", "Iowa", "Kansas", "Michigan", "Minnesota",
"Missouri", "Nebraska", "North Dakota", "Ohio", "South Dakota", "Wisconsin")
Northeast <- c("Connecticut", "Maine", "Massachusetts", "New Hampshire", "New Jersey",
"New York", "Pennsylvania", "Rhode Island", "Vermont")
West <- c("Alaska", "Arizona", "California", "Colorado", "Hawaii", "Idaho",
"Montana", "Nevada", "New Mexico", "Oregon", "Utah", "Washington", "Wyoming")
South <- c("Alabama", "Arkansas", "Delaware", "District of Columbia", "Florida", "Georgia",
"Kentucky", "Louisiana", "Maryland", "Mississippi", "North Carolina", "Oklahoma",
"South Carolina", "Tennessee", "Texas", "Virginia", "West Virginia")
region_df <- data.frame(
state = c(Midwest, Northeast, West, South),
region = c(rep("Midwest", length(Midwest)),
rep("Northeast", length(Northeast)),
rep("West", length(West)),
rep("South", length(South)))
)
Create Map
library(geofacet)
#install.packages("choroplethr")
#library(choroplethr)
#install.packages("plotly")
library(plotly)
state_choropleth(region_df, geoid.name = 'state', value.name = 'region')
ggsave("color_coded_map_region.png", width = 10, height = 10)

Look at Total Regional Prevalence for Obesity and Diabetes
fig1 = ggplot(state %>% filter(year == "2024", age == "Total", outcome_name == "Diabetes"), aes(x = region, y = value, color = geography, group = region)) +
geom_quasirandom(dodge.width = 0.8, size = 2.5, alpha = 0.8) +
facet_wrap(~source) +
labs(
title = "Total 2024 Diabetes Prevalence by Region",
subtitle = "CDC BRFSS, Epic Cosmos: HbA1c, Epic Cosmos: ICD10 Data",
x = "Region",
y = "Prevalence (%)",
color = "Region:"
) +
theme_minimal(base_size = 14) +
theme(
axis.text.x = element_text(size = 16, angle = 45, hjust = 1),
plot.title = element_text(size = 20, hjust = 0.5, face = "bold"),
plot.subtitle = element_text(size = 14, hjust = 0.5), panel.spacing = unit(3.5, "lines"), strip.text = element_text(size = 15, face = "bold"), legend.position = "none"
)
fig1 = ggplotly(fig1, tooltip = c("geography", "value"))
fig1
# Save ggplotly as widget in file test.html
saveWidget(ggplotly(fig1), file = "diab_int.html")
test_df = state %>% filter(year == "2024", age == "Total", outcome_name == "Obesity", region == "South") %>% select(geography, region, value, source)
write.csv(test_df , "mydata.csv", row.names = FALSE)
ggplot(state %>%
filter(year != "2025",
age == "Total",
outcome_name == "Diabetes",
source != "Medicare FFS"),
aes(x = year, y = value, color = geography, group = geography)) +
geom_line() +
facet_wrap(~ region) +
labs(
title = "Total 2024 Diabetes Prevalence by Region",
subtitle = "CDC BRFSS, Epic Cosmos: HbA1c, Epic Cosmos: ICD10 Data",
x = "Year",
y = "Prevalence (%)",
color = "State"
) +
theme_minimal(base_size = 14) +
theme(
axis.text.x = element_text(size = 16, angle = 45, hjust = 1),
plot.title = element_text(size = 20, hjust = 0.5, face = "bold"),
plot.subtitle = element_text(size = 16, hjust = 0.5),
panel.spacing = unit(3.5, "lines"),
strip.text = element_text(size = 16, face = "bold")
)

LS0tDQp0aXRsZTogIlN1YlN0YWNrIEJsb2cgUG9zdCINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCkxvYWQgUGFja2FnZXMNCg0KYGBge3J9DQoNCmxpYnJhcnkoYXJyb3cpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZ2diZWVzd2FybSkNCmxpYnJhcnkoZHBseXIpDQoNCg0KYGBgDQoNClVwbG9hZCBQYXJxdWV0IEZpbGU6DQoNCmBgYHtyfQ0KZDEgPSByZWFkX3BhcnF1ZXQoIkM6L1VzZXJzL2FzYXJlL0Rvd25sb2Fkcy9wcmV2YWxlbmNlX2J5X2dlb2dyYXBoeV9hbmRfeWVhcl9hbmRfc291cmNlICgyKS5wYXJxdWV0IikNCg0KaGVhZChkMSkNCmBgYA0KDQoNCkFkZCBSZWdpb25zIENvbHVtbjoNCg0KYGBge3J9DQpkMSA9IGQxICU+JQ0KICBtdXRhdGUocmVnaW9uID0gY2FzZV93aGVuKA0KICAgIGdlb2dyYXBoeSAlaW4lIGMoIklsbGlub2lzIiwgIkluZGlhbmEiLCAiSW93YSIsICJLYW5zYXMiLCAiTWljaGlnYW4iLCAiTWlubmVzb3RhIiwgDQogICAgICAgICAgICAgICAgICJNaXNzb3VyaSIsICJOZWJyYXNrYSIsICJOb3J0aCBEYWtvdGEiLCAiT2hpbyIsICJTb3V0aCBEYWtvdGEiLCAiV2lzY29uc2luIikgfiAiTWlkd2VzdCIsDQogICAgZ2VvZ3JhcGh5ICVpbiUgYygiQ29ubmVjdGljdXQiLCAiTWFpbmUiLCAiTWFzc2FjaHVzZXR0cyIsICJOZXcgSGFtcHNoaXJlIiwgIk5ldyBKZXJzZXkiLCANCiAgICAgICAgICAgICAgICAgIk5ldyBZb3JrIiwgIlBlbm5zeWx2YW5pYSIsICJSaG9kZSBJc2xhbmQiLCAiVmVybW9udCIpIH4gIk5vcnRoZWFzdCIsDQogICAgZ2VvZ3JhcGh5ICVpbiUgYygiQWxhc2thIiwgIkFyaXpvbmEiLCAiQ2FsaWZvcm5pYSIsICJDb2xvcmFkbyIsICJIYXdhaWkiLCAiSWRhaG8iLCANCiAgICAgICAgICAgICAgICAgIk1vbnRhbmEiLCAiTmV2YWRhIiwgIk5ldyBNZXhpY28iLCAiT3JlZ29uIiwgIlV0YWgiLCAiV2FzaGluZ3RvbiIsICJXeW9taW5nIikgfiAiV2VzdCIsDQogICAgZ2VvZ3JhcGh5ICVpbiUgYygiQWxhYmFtYSIsICJBcmthbnNhcyIsICJEZWxhd2FyZSIsICJEaXN0cmljdCBvZiBDb2x1bWJpYSIsICJGbG9yaWRhIiwgIkdlb3JnaWEiLCANCiAgICAgICAgICAgICAgICAgIktlbnR1Y2t5IiwgIkxvdWlzaWFuYSIsICJNYXJ5bGFuZCIsICJNaXNzaXNzaXBwaSIsICJOb3J0aCBDYXJvbGluYSIsICJPa2xhaG9tYSIsIA0KICAgICAgICAgICAgICAgICAiU291dGggQ2Fyb2xpbmEiLCAiVGVubmVzc2VlIiwgIlRleGFzIiwgIlZpcmdpbmlhIiwgIldlc3QgVmlyZ2luaWEiKSB+ICJTb3V0aCIsDQogICAgVFJVRSB+ICJPdGhlciINCiAgKSkNCg0KDQojU2VwYXJhdGUgRGF0YXNldHMgYnkgVW5pdGVkIFN0YXRlcyBvbmx5IGFuZCBTdGF0ZXMgT25seQ0KDQpzdGF0ZSA9IGQxICU+JSBmaWx0ZXIoISByZWdpb24gJWluJSBjKCJPdGhlciIpKQ0KdXMgPSBkMSAlPiUgZmlsdGVyKHJlZ2lvbiA9PSAiT3RoZXIiKQ0KYGBgDQoNCg0KQ3JlYXRlIFNlcGFyYXRlIFJlZ2lvbiBPbmx5IERhdGFzZXQNCmBgYHtyfQ0KTWlkd2VzdCA9IGMoIklsbGlub2lzIiwgIkluZGlhbmEiLCAiSW93YSIsICJLYW5zYXMiLCAiTWljaGlnYW4iLCAiTWlubmVzb3RhIiwgDQogICAgICAgICAgICAgICAgICJNaXNzb3VyaSIsICJOZWJyYXNrYSIsICJOb3J0aCBEYWtvdGEiLCAiT2hpbyIsICJTb3V0aCBEYWtvdGEiLCAiV2lzY29uc2luIikgDQpOb3J0aGVhc3QgPSBjKCJDb25uZWN0aWN1dCIsICJNYWluZSIsICJNYXNzYWNodXNldHRzIiwgIk5ldyBIYW1wc2hpcmUiLCAiTmV3IEplcnNleSIsIA0KICAgICAgICAgICAgICAgICAiTmV3IFlvcmsiLCAiUGVubnN5bHZhbmlhIiwgIlJob2RlIElzbGFuZCIsICJWZXJtb250IikgDQpXZXN0ID0gYygiQWxhc2thIiwgIkFyaXpvbmEiLCAiQ2FsaWZvcm5pYSIsICJDb2xvcmFkbyIsICJIYXdhaWkiLCAiSWRhaG8iLCANCiAgICAgICAgICAgICAgICAgIk1vbnRhbmEiLCAiTmV2YWRhIiwgIk5ldyBNZXhpY28iLCAiT3JlZ29uIiwgIlV0YWgiLCAiV2FzaGluZ3RvbiIsICJXeW9taW5nIikNClNvdXRoID0gYygiQWxhYmFtYSIsICJBcmthbnNhcyIsICJEZWxhd2FyZSIsICJEaXN0cmljdCBvZiBDb2x1bWJpYSIsICJGbG9yaWRhIiwgIkdlb3JnaWEiLCANCiAgICAgICAgICAgICAgICAgIktlbnR1Y2t5IiwgIkxvdWlzaWFuYSIsICJNYXJ5bGFuZCIsICJNaXNzaXNzaXBwaSIsICJOb3J0aCBDYXJvbGluYSIsICJPa2xhaG9tYSIsIA0KICAgICAgICAgICAgICAgICAiU291dGggQ2Fyb2xpbmEiLCAiVGVubmVzc2VlIiwgIlRleGFzIiwgIlZpcmdpbmlhIiwgIldlc3QgVmlyZ2luaWEiKQ0KDQpNaWR3ZXN0IDwtIGMoIklsbGlub2lzIiwgIkluZGlhbmEiLCAiSW93YSIsICJLYW5zYXMiLCAiTWljaGlnYW4iLCAiTWlubmVzb3RhIiwNCiAgICAgICAgICAgICAiTWlzc291cmkiLCAiTmVicmFza2EiLCAiTm9ydGggRGFrb3RhIiwgIk9oaW8iLCAiU291dGggRGFrb3RhIiwgIldpc2NvbnNpbiIpDQoNCk5vcnRoZWFzdCA8LSBjKCJDb25uZWN0aWN1dCIsICJNYWluZSIsICJNYXNzYWNodXNldHRzIiwgIk5ldyBIYW1wc2hpcmUiLCAiTmV3IEplcnNleSIsDQogICAgICAgICAgICAgICAiTmV3IFlvcmsiLCAiUGVubnN5bHZhbmlhIiwgIlJob2RlIElzbGFuZCIsICJWZXJtb250IikNCg0KV2VzdCA8LSBjKCJBbGFza2EiLCAiQXJpem9uYSIsICJDYWxpZm9ybmlhIiwgIkNvbG9yYWRvIiwgIkhhd2FpaSIsICJJZGFobyIsDQogICAgICAgICAgIk1vbnRhbmEiLCAiTmV2YWRhIiwgIk5ldyBNZXhpY28iLCAiT3JlZ29uIiwgIlV0YWgiLCAiV2FzaGluZ3RvbiIsICJXeW9taW5nIikNCg0KU291dGggPC0gYygiQWxhYmFtYSIsICJBcmthbnNhcyIsICJEZWxhd2FyZSIsICJEaXN0cmljdCBvZiBDb2x1bWJpYSIsICJGbG9yaWRhIiwgIkdlb3JnaWEiLA0KICAgICAgICAgICAiS2VudHVja3kiLCAiTG91aXNpYW5hIiwgIk1hcnlsYW5kIiwgIk1pc3Npc3NpcHBpIiwgIk5vcnRoIENhcm9saW5hIiwgIk9rbGFob21hIiwNCiAgICAgICAgICAgIlNvdXRoIENhcm9saW5hIiwgIlRlbm5lc3NlZSIsICJUZXhhcyIsICJWaXJnaW5pYSIsICJXZXN0IFZpcmdpbmlhIikNCg0KcmVnaW9uX2RmIDwtIGRhdGEuZnJhbWUoDQogIHN0YXRlID0gYyhNaWR3ZXN0LCBOb3J0aGVhc3QsIFdlc3QsIFNvdXRoKSwNCiAgcmVnaW9uID0gYyhyZXAoIk1pZHdlc3QiLCBsZW5ndGgoTWlkd2VzdCkpLA0KICAgICAgICAgICAgIHJlcCgiTm9ydGhlYXN0IiwgbGVuZ3RoKE5vcnRoZWFzdCkpLA0KICAgICAgICAgICAgIHJlcCgiV2VzdCIsIGxlbmd0aChXZXN0KSksDQogICAgICAgICAgICAgcmVwKCJTb3V0aCIsIGxlbmd0aChTb3V0aCkpKSkNCmBgYA0KDQpDcmVhdGUgTWFwDQpgYGB7cn0NCmxpYnJhcnkoZ2VvZmFjZXQpDQpgYGANCmBgYHtyfQ0KI2luc3RhbGwucGFja2FnZXMoImNob3JvcGxldGhyIikNCiNsaWJyYXJ5KGNob3JvcGxldGhyKQ0KI2luc3RhbGwucGFja2FnZXMoInBsb3RseSIpDQpsaWJyYXJ5KHBsb3RseSkNCg0KYGBgDQoNCmBgYHtyfQ0Kc3RhdGVfY2hvcm9wbGV0aChyZWdpb25fZGYsIGdlb2lkLm5hbWUgPSAnc3RhdGUnLCB2YWx1ZS5uYW1lID0gJ3JlZ2lvbicpDQoNCmdnc2F2ZSgiY29sb3JfY29kZWRfbWFwX3JlZ2lvbi5wbmciLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSAxMCkNCmBgYA0KTG9vayBhdCBUb3RhbCBSZWdpb25hbCBQcmV2YWxlbmNlIGZvciBPYmVzaXR5IGFuZCBEaWFiZXRlcw0KDQpgYGB7cn0NCg0KZ2dwbG90KHN0YXRlICU+JSBmaWx0ZXIoeWVhciA9PSAiMjAyNCIsIGFnZSA9PSAiVG90YWwiLCBvdXRjb21lX25hbWUgPT0gIkRpYWJldGVzIiksIGFlcyh4ICA9IHJlZ2lvbiwgeSA9IHZhbHVlLCBjb2xvciA9IHJlZ2lvbikpICsgIA0KICBnZW9tX3F1YXNpcmFuZG9tKGRvZGdlLndpZHRoID0gMC44LCBzaXplID0gMi41LCBhbHBoYSA9IDAuOCkgICsNCiAgZmFjZXRfd3JhcCh+c291cmNlKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiVG90YWwgMjAyNCBEaWFiZXRlcyBQcmV2YWxlbmNlIGJ5IFJlZ2lvbiIsDQogICAgc3VidGl0bGUgPSAiQ0RDIEJSRlNTLCBFcGljIENvc21vczogSGJBMWMsIEVwaWMgQ29zbW9zOiBJQ0QxMCBEYXRhIiwNCiAgICB4ID0gIlJlZ2lvbiIsDQogICAgeSA9ICJQcmV2YWxlbmNlICglKSIsDQogICAgY29sb3IgPSAiUmVnaW9uOiINCiAgKSArDQogIHRoZW1lX21pbmltYWwoYmFzZV9zaXplID0gMTQpICsNCiAgdGhlbWUoDQogICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2LCBhbmdsZSA9IDQ1LCBoanVzdCA9IDEpLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDIwLCBoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQsIGhqdXN0ID0gMC41KSwgcGFuZWwuc3BhY2luZyA9IHVuaXQoMy41LCAibGluZXMiKSwgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTUsIGZhY2UgPSAiYm9sZCIpDQogICkNCg0KDQpnZ3NhdmUoInRvdGFsX3JwX2JlZS5wbmciLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSA4KQ0KDQojRGlhYmV0ZXMgSW50ZXJhY3RpdmUgUGxvdA0KDQoNCmZpZzEgPSBnZ3Bsb3Qoc3RhdGUgJT4lIGZpbHRlcih5ZWFyID09ICIyMDI0IiwgYWdlID09ICJUb3RhbCIsIG91dGNvbWVfbmFtZSA9PSAiRGlhYmV0ZXMiKSwgYWVzKHggID0gcmVnaW9uLCB5ID0gdmFsdWUsIGNvbG9yID0gZ2VvZ3JhcGh5LCBncm91cCA9IHJlZ2lvbikpICsgIA0KICBnZW9tX3F1YXNpcmFuZG9tKGRvZGdlLndpZHRoID0gMC44LCBzaXplID0gMi41LCBhbHBoYSA9IDAuOCkgICsNCiAgZmFjZXRfd3JhcCh+c291cmNlKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiVG90YWwgMjAyNCBEaWFiZXRlcyBQcmV2YWxlbmNlIGJ5IFJlZ2lvbiIsDQogICAgc3VidGl0bGUgPSAiQ0RDIEJSRlNTLCBFcGljIENvc21vczogSGJBMWMsIEVwaWMgQ29zbW9zOiBJQ0QxMCBEYXRhIiwNCiAgICB4ID0gIlJlZ2lvbiIsDQogICAgeSA9ICJQcmV2YWxlbmNlICglKSIsDQogICAgY29sb3IgPSAiUmVnaW9uOiINCiAgKSArDQogIHRoZW1lX21pbmltYWwoYmFzZV9zaXplID0gMTQpICsNCiAgdGhlbWUoDQogICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2LCBhbmdsZSA9IDQ1LCBoanVzdCA9IDEpLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDIwLCBoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQsIGhqdXN0ID0gMC41KSwgcGFuZWwuc3BhY2luZyA9IHVuaXQoMy41LCAibGluZXMiKSwgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTUsIGZhY2UgPSAiYm9sZCIpLCBsZWdlbmQucG9zaXRpb24gPSAibm9uZSINCiAgKQ0KDQoNCmZpZzEgPSBnZ3Bsb3RseShmaWcxLCB0b29sdGlwID0gYygiZ2VvZ3JhcGh5IiwgInZhbHVlIikpDQpmaWcxDQojIFNhdmUgZ2dwbG90bHkgYXMgd2lkZ2V0IGluIGZpbGUgdGVzdC5odG1sDQpzYXZlV2lkZ2V0KGdncGxvdGx5KGZpZzEpLCBmaWxlID0gImRpYWJfaW50Lmh0bWwiKQ0KDQojT2Jlc2l0eQ0KDQoNCmdncGxvdChzdGF0ZSAlPiUgZmlsdGVyKHllYXIgPT0gIjIwMjQiLCBhZ2UgPT0gIlRvdGFsIiwgb3V0Y29tZV9uYW1lID09ICJPYmVzaXR5IiksIGFlcyh4ICA9IHJlZ2lvbiwgeSA9IHZhbHVlLCBjb2xvciA9IHJlZ2lvbikpICsgIA0KICBnZW9tX3F1YXNpcmFuZG9tKGRvZGdlLndpZHRoID0gMC44LCBzaXplID0gMi41LCBhbHBoYSA9IDAuOCkgICsNCiAgZmFjZXRfd3JhcCh+c291cmNlKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiVG90YWwgMjAyNCBPYmVzaXR5IFByZXZhbGVuY2UgYnkgUmVnaW9uIiwNCiAgICBzdWJ0aXRsZSA9ICJDREMgQlJGU1MsIEVwaWMgQ29zbW9zOiBCTUksIEVwaWMgQ29zbW9zOiBJQ0QxMCBEYXRhIiwNCiAgICB4ID0gIlJlZ2lvbiIsDQogICAgeSA9ICJQcmV2YWxlbmNlICglKSIsDQogICAgZmlsbCA9ICJEYXRhIFNvdXJjZSIsIGNvbG9yID0gIlJlZ2lvbjoiDQogICkgKw0KICB0aGVtZV9taW5pbWFsKGJhc2Vfc2l6ZSA9IDE0KSArDQogIHRoZW1lKA0KICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiwgYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMCwgaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2LCBoanVzdCA9IDAuNSksIHBhbmVsLnNwYWNpbmcgPSB1bml0KDMuNSwgImxpbmVzIiksIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE1LCBmYWNlID0gImJvbGQiKQ0KICApDQoNCmdnc2F2ZSgib2JzX3RvdGFsX3JwX2JlZS5wbmciLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSA4KQ0KDQoNCiNPYmVzaXR5IEludGVyYWN0aXZlIFBsb3QNCg0KDQpmaWcyID0gZ2dwbG90KHN0YXRlICU+JSBmaWx0ZXIoeWVhciA9PSAiMjAyNCIsIGFnZSA9PSAiVG90YWwiLCBvdXRjb21lX25hbWUgPT0gIk9iZXNpdHkiKSwgYWVzKHggID0gcmVnaW9uLCB5ID0gdmFsdWUsIGNvbG9yID0gZ2VvZ3JhcGh5LCBncm91cCA9IHJlZ2lvbikpICsgIA0KICBnZW9tX3F1YXNpcmFuZG9tKGRvZGdlLndpZHRoID0gMC44LCBzaXplID0gMi41LCBhbHBoYSA9IDAuOCkgICsNCiAgZmFjZXRfd3JhcCh+c291cmNlKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiVG90YWwgMjAyNCBPYmVzaXR5IFByZXZhbGVuY2UgYnkgUmVnaW9uIiwNCiAgICBzdWJ0aXRsZSA9ICJDREMgQlJGU1MsIEVwaWMgQ29zbW9zOiBCTUksIEVwaWMgQ29zbW9zOiBJQ0QxMCBEYXRhIiwNCiAgICB4ID0gIlJlZ2lvbiIsDQogICAgeSA9ICJQcmV2YWxlbmNlICglKSIsDQogICAgZmlsbCA9ICJEYXRhIFNvdXJjZSIsIGNvbG9yID0gIlJlZ2lvbjoiDQogICkgKw0KICB0aGVtZV9taW5pbWFsKGJhc2Vfc2l6ZSA9IDE0KSArDQogIHRoZW1lKA0KICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiwgYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMCwgaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2LCBoanVzdCA9IDAuNSksIHBhbmVsLnNwYWNpbmcgPSB1bml0KDMuNSwgImxpbmVzIiksIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE1LCBmYWNlID0gImJvbGQiKSwgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiDQogICkNCg0KZmlnMiA9IGdncGxvdGx5KGZpZzIsIHRvb2x0aXAgPSBjKCJnZW9ncmFwaHkiLCAidmFsdWUiKSkNCmZpZzINCiMgU2F2ZSBnZ3Bsb3RseSBhcyB3aWRnZXQgaW4gZmlsZSB0ZXN0Lmh0bWwNCnNhdmVXaWRnZXQoZ2dwbG90bHkoZmlnMiksIGZpbGUgPSAib2JzX2ludC5odG1sIikNCg0KI0NyZWF0ZSBhY2NvdW50IHdpdGggcGxvdGx5IC0tIGFkZCB1c2VyIG5hbWUgYW5kIGFwaSBrZXkgdG8gcnN0dWRpbyAtLSBhcGlfY3JlYXRlKG5hbWUgb2YgcGxvdCwgbmFtZSBvZiBkZXNpcmVkIGZpbGUpIC0tPiBwdWJsaXNoIGdyYXBoIHRvIG9ubGluZSBwbG90bHkgYWNjb3VudCAtLT4gdXNlIHVybCBhcyBpZnJhbWUgaW4gc3Vic3RhY2sgdG8gZW1iZWQgaHRtbCBpbiBibG9nIHBvc3QNCg0KIyBJbnN0YWxsIG5lY2Vzc2FyeSBwYWNrYWdlcyBpZiB5b3UgaGF2ZW4ndCBhbHJlYWR5DQojIGluc3RhbGwucGFja2FnZXMoInBsb3RseSIpDQojIGluc3RhbGwucGFja2FnZXMoImh0bWx3aWRnZXRzIikNCg0KbGlicmFyeShwbG90bHkpDQpsaWJyYXJ5KGh0bWx3aWRnZXRzKQ0KbGlicmFyeShnZ3Bsb3QyKSAjIE9wdGlvbmFsLCBpZiB5b3UncmUgY29udmVydGluZyBhIGdncGxvdA0KDQojIEV4YW1wbGU6IENyZWF0ZSBhIHBsb3RseSBncmFwaA0KcCA8LSBwbG90X2x5KGRhdGEgPSBkaWFtb25kcywgeCA9IH5jYXJhdCwgeSA9IH5wcmljZSwgdGV4dCA9IH5wYXN0ZSgiQ2xhcml0eTogIiwgY2xhcml0eSksDQogICAgICAgICAgICAgbW9kZSA9ICJtYXJrZXJzIiwgY29sb3IgPSB+Y2FyYXQsIHNpemUgPSB+Y2FyYXQpDQoNCiMgU2F2ZSB0aGUgcGxvdCBhcyBhIHN0YW5kYWxvbmUgSFRNTCBmaWxlDQpzYXZlV2lkZ2V0KGFzX3dpZGdldChwKSwgInBsb3RseV9ncmFwaC5odG1sIiwgc2VsZmNvbnRhaW5lZCA9IFRSVUUpDQoNCg0KYGBgDQoNCmBgYHtyfQ0KDQojT2Jlc2l0eQ0KdGVzdF9kZiA9IHN0YXRlICU+JSBmaWx0ZXIoeWVhciA9PSAiMjAyNCIsIGFnZSA9PSAiVG90YWwiLCBvdXRjb21lX25hbWUgPT0gIk9iZXNpdHkiKSAlPiUgc2VsZWN0KGdlb2dyYXBoeSwgcmVnaW9uLCB2YWx1ZSwgc291cmNlKQ0KDQp3aWRlX2RmIDwtIHRlc3RfZGYgfD4NCiAgcGl2b3Rfd2lkZXIoDQogICAgbmFtZXNfZnJvbSA9IGdlb2dyYXBoeSwNCiAgICB2YWx1ZXNfZnJvbSA9IHZhbHVlDQogICkNCg0KDQp3cml0ZS5jc3Yod2lkZV9kZiAsICJteWRhdGEzLmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQ0KDQojRGlhYmV0ZXMNCg0KDQpkaWFiX2RmID0gc3RhdGUgJT4lIGZpbHRlcih5ZWFyID09ICIyMDI0IiwgYWdlID09ICJUb3RhbCIsIG91dGNvbWVfbmFtZSA9PSAiRGlhYmV0ZXMiKSAlPiUgc2VsZWN0KGdlb2dyYXBoeSwgcmVnaW9uLCB2YWx1ZSwgc291cmNlKQ0KDQp3aWRlX2RpYWIgPC0gZGlhYl9kZiB8Pg0KICBwaXZvdF93aWRlcigNCiAgICBuYW1lc19mcm9tID0gc291cmNlLA0KICAgIHZhbHVlc19mcm9tID0gdmFsdWUNCiAgKQ0KDQoNCndyaXRlLmNzdih3aWRlX2RpYWIgLCAibXlkYXRhNC5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkNCg0KYGBgDQoNCmBgYHtyfQ0KZ2dwbG90KHN0YXRlICU+JQ0KICAgICAgICAgZmlsdGVyKHllYXIgIT0gIjIwMjUiLA0KICAgICAgICAgICAgICAgIGFnZSA9PSAiVG90YWwiLA0KICAgICAgICAgICAgICAgIG91dGNvbWVfbmFtZSA9PSAiRGlhYmV0ZXMiLA0KICAgICAgICAgICAgICAgIHNvdXJjZSAhPSAiTWVkaWNhcmUgRkZTIiksDQogICAgICAgYWVzKHggPSB5ZWFyLCB5ID0gdmFsdWUsIGNvbG9yID0gZ2VvZ3JhcGh5LCBncm91cCA9IGdlb2dyYXBoeSkpICsNCiAgZ2VvbV9saW5lKCkgKw0KICBmYWNldF93cmFwKH4gcmVnaW9uKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiVG90YWwgMjAyNCBEaWFiZXRlcyBQcmV2YWxlbmNlIGJ5IFJlZ2lvbiIsDQogICAgc3VidGl0bGUgPSAiQ0RDIEJSRlNTLCBFcGljIENvc21vczogSGJBMWMsIEVwaWMgQ29zbW9zOiBJQ0QxMCBEYXRhIiwNCiAgICB4ID0gIlllYXIiLA0KICAgIHkgPSAiUHJldmFsZW5jZSAoJSkiLA0KICAgIGNvbG9yID0gIlN0YXRlIg0KICApICsNCiAgdGhlbWVfbWluaW1hbChiYXNlX3NpemUgPSAxNCkgKw0KICB0aGVtZSgNCiAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYsIGFuZ2xlID0gNDUsIGhqdXN0ID0gMSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMjAsIGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiwgaGp1c3QgPSAwLjUpLA0KICAgIHBhbmVsLnNwYWNpbmcgPSB1bml0KDMuNSwgImxpbmVzIiksDQogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYsIGZhY2UgPSAiYm9sZCIpDQogICkNCmBgYA0KDQo=